前言:最近都没有更新过,感觉博客快荒废了,得更新了[]~( ̄▽ ̄)~*,这次总结一下做的一些web题。
一、Not Found
打开页面便是404,但是下面有一个404.php,访问一下
除下有出题人的haha,没有其他信息了,御剑扫一下
打开页面,发现也没有有用的信息
重新回到原点,看看是不是漏掉些什么,看了出题人的提示
加上一个奇怪的参数
是不是和HTTP请求方式有关,百度查下
HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
这么多请求方式,挨个试下CONNECT
请求方式,发现是Apache/2.4.7 (Ubuntu) Server
OPTIONS
请求方式,发现有不同的地方
访问1.php,继续使用OPTIONS
请求方式
没有有用的信息,查询下是否存在flag.php
到这里感觉又没思路了,看了大师傅的博客,发现Apache/2.4.7 (Ubuntu) Server
的信息是有用的,Appache搭建的网站中,根目录下会存在.htaccess
文件
简单了解一下.htaccess
文件
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
访问.htaccess
文件
访问8d829d8568e46455104209db5cd9228d.html
,发现flag
EXEC
一只猫和no sign
,提示说了执行、执行、执行
,应该是命令执行这一类的,抓包看看是否有线索
发现vim
,之前刚做过一个敏感信息泄露,里面就涉及到vim
,这样就简单介绍一下
非正常关闭vim编辑器时(比如直接关闭终端或者电脑断电),会生成一个.swp文件,这个文件是一个临时交换文件,用来备份缓冲区中的内容,会导致程序的源码泄漏。
1 | /.index.php.swp |
发现确实有源码被下载了,但是是swp文件,我们需要恢复一下
1 | vi -r 文件名 |
得到源码
接下来就来审计代码,先观察check
函数,函数包含的代码很好理解,$number == '11259375'
,常规的数字肯定是绕不过去的,我们可以将number
转换成十六进制,这样绕过check
函数
简单解释下:
1 | //11259375的十六进制为0xabcdef |
接下来看下面的代码,发现
1 | setcookie('auth','tcp tunnel is forbidden!'); |
这句话的意思说明TCP被禁止,简单了解一下TCP
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义
这个跟我们做的题有什么关系,看了大师傅的博客,TCP被禁止不能用curl
,那再来了解一下curl
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
POST
传输cmd命令,执行后也没有回显,之前的源码中提示了flag所在的文件名,既然禁用了curl
,那就用nc
命令把flag文件下过来
然后在服务器端运行即可得出flag
1 | nc -u -l -p 20000 |
(由于我没有一台公网能访问的服务器,所以没做这一步,但是方法没有错)
参考博客:
nc命令
curl命令
大师傅博客
vim源码泄露
Login
一个简易的登陆框,一开始以为是SQL注入,试了几遍看了源码,发现有账号和密码
登陆进去
一开始以为颜文字解密,结果解不开,那就抓包来看看有什么线索没
一开始真的没观察到,看了大师傅的博客才发现show
这个参数存在猫腻(show-显示,0代表false,1代表true)
当show
值为1时,出现了源码
将源码复制下来,审计代码(注释是自己加的)class db
这一段就是检测和执行SQL查询,最重要的是下面这段代码
1 | if(isset($requset['token'])) |
只要满足
1 | if($login['user'] === 'ichunqiu') |
即可得到flag
这里就涉及到php压缩gzcompress和解压gzuncompress字符串的方法
1 | php压缩gzcompress和解压gzuncompress字符串的方法 |
那思路就很明显了,题中是解压数据,那我们只需将ichunqiu
压缩然后传递即可
然后写一个简单的php脚本跑一下
1 |
|
源码中有一段代码
1 | $requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE); |
得到token值后传给cookie即可得出flag
总结:这次学到很多知识无论是HTTP请求方式,还是源码泄露等,这次就先总结道这里,下次继续总结!!